<?php
//设置php输出页面为utf8
header("Content-type: text/html; charset=utf-8");


//这个函数是用来检查的文件

function delete_img($theme_folder, $dbName , $table_Prefix){


	//不进行搜索的表,排除这些不可能存在图片的表
	$no_select_table = array($table_Prefix."access_log",
							 $table_Prefix."login_admin",
							 $table_Prefix."sql_log",
							 $table_Prefix."message",
							 $table_Prefix."car",
							 $table_Prefix."relation",
							 $table_Prefix."detail_relation",
							 $table_Prefix."sessions",
							 $table_Prefix."message",
							 $table_Prefix."search_log"
	);



	//检查表是否有这个字段  如果没有自动生成。用于记录检查时间。因为这个是一个周期性的检查，不用每次登录都检查
	update_exists($table_Prefix."site" , 'update_time' , 2);



	$img_url = array();

	$sql = " SELECT * FROM ".$table_Prefix."site limit 1 ";

	$result = mysql_query($sql);
	$site_info = mysql_fetch_assoc($result);


	$ten_time = time()-(3*86400); //3日更新一次


	//判断时间执行。3天一次。测试时不用理。
	//if($site_info['update_time'] < $ten_time && $site_info){
	if($site_info){
		$result = mysql_query("show tables from $dbName");

		while( $row = mysql_fetch_row($result)){

			$table_name = $row[0];

			if(!in_array($table_name,$no_select_table)){

				$result_tc = mysql_query("show columns from $table_name");

				$key_list = array();


				//获取表格的所有字段。每个数组就是一个表格的内容
				while ($row_tc = mysql_fetch_row($result_tc))
				{
					$key_list[] = $row_tc[0];

				}

				//print_r2($key_list);


				$sql_t = " SELECT * FROM ".$table_name;

				$res_t = mysql_query($sql_t);

				while ($row_t = mysql_fetch_assoc($res_t))
				{
					//print_r2($row_t);
					//每个$row_t就是一条数据。然后把一条数据的每个项目，都查看一下是否有图片内容

					foreach($key_list as $val){
						$img_path_content = check_content_img($row_t[$val]);

						if(!empty($img_path_content)){
							$img_url[] =  $img_path_content;
						}

					}
				}
			}
		}






		foreach($img_url as $img_val){
			foreach($img_val as $img_val2){
				$images_url =  preg_replace("/\..\//i","",ROOT_PATH_.'/'.$img_val2);
				$images_url =  preg_replace("/\/\//i","/",$images_url);
				$img_list[] = end(explode("/",$images_url));
			}
		}


		//列出数据库中用到的图
		$img_list = array_unique(array_filter($img_list)); //把数组去重复





		$dir = iconv("UTF-8", "GBK", ROOT_PATH_.'/uploadfiles/'.$theme_folder."/delete_img");

		if (!file_exists($dir)){
			mkdir ($dir,0777,true);
		}






		//返回文件名列表，files就是记录所有的文件了
		$files = my_dir(ROOT_PATH_."/uploadfiles/".$theme_folder);

		$new_file = get_new_one_array($files);

		$i = 0;


		//检查表是否有这个字段  如果没有自动生成。用于记录检查时间。因为这个是一个周期性的检查，不用每次登录都检查
		update_exists("`".$table_Prefix."deadline_img`" , '`theme_folder`' ,"1");

		foreach($new_file as $key=>$val){

			if(!in_array($val,$img_list)){


				$img_name=iconv("GBK", "UTF-8", $key);
				//echo "<br/>";
				//echo $val."不在列表，应该删除";
				$sql2 = "INSERT INTO ".$table_Prefix."deadline_img (name,theme_folder,is_delete ) VALUES ( '".$img_name."','".$theme_folder."', 0  );";

				mysql_query($sql2) or die (mysql_error());;

				$img_path_arr = explode('/',$key);

				$img_path = end(explode("/",$key));  //图片链接

				$img_arr_count = count($img_path_arr);//2个算根目录下

				if($img_arr_count > 2 ){
					$new_path = ROOT_PATH_."/uploadfiles/".$theme_folder."/delete_img";

					foreach($img_path_arr as $key2=>$val){
						if($key2 != 0 && $key2 != ($img_arr_count-1)){
							$new_path.="/".$val;
						}

					}

					if (!file_exists($new_path)){
						mkdir ($new_path,0777,true);
					}

					$file= ROOT_PATH_."/uploadfiles/".$theme_folder.$key; //旧目录
					$newFile= $new_path.'/'.$img_path; //新目录
					$copy_res =  copy($file,$newFile); //拷贝到新目录

					if($copy_res){
						@unlink($file); //删除旧目录下的文件
					}
				}
				else{

					$file= ROOT_PATH_."/uploadfiles/".$theme_folder."/".$val; //旧目录
					$newFile=ROOT_PATH_."/uploadfiles/".$theme_folder."/delete_img/".$val; //新目录
					$copy_res =  copy($file,$newFile); //拷贝到新目录

					if($copy_res){
						@unlink($file); //删除旧目录下的文件
					}
				}

				//@unlink(ROOT_PATH_."/uploadfiles/signup/".$val);
			}

		}


		$sql = "UPDATE `evo_site` SET  update_time = '".time()."'  where nid = ".$site_info['nid'];

		mysql_query($sql);
	}


}



function get_new_one_array($array,$file_name=''){

	//把文件清单做成  地址+文件名为key，文件名为value
	static  $new_array = array();

	foreach($array as $key=>$value){

		if(is_array($value)){
			get_new_one_array($value,$file_name.'/'.$key);
		}
		else{
			$new_array[$file_name.'/'.$value] = $value;
		}
	}

	return $new_array;
}



//本功能应该是检车编辑框里面的内容。但是一些附件，例如视频之类的上传文件，是否也检查到？

function check_content_img($content){
	//匹配并删除图片
	$imgreg = "/<img.*src=\"([^\"]+)\"/U";
	$matches = array();
	preg_match_all($imgreg, $content, $matches);

	$img_path = array();

	if(empty($matches[1]) ){

		if(strpos($content, '.jpg')!==false){

			return $img_path[] = array($content);
		}
		elseif(strpos($content, '.JPG')!==false){

			return $img_path[] = array($content);
		}
		elseif(strpos($content, '.JPEG')!==false){

			return $img_path[] = array($content);
		}
		elseif(strpos($content, '.PNG')!==false){

			return $img_path[] = array($content);
		}
		elseif(strpos($content, '.png')!==false){

			return $img_path[] = array($content);
		}
		elseif(strpos($content, '.GIF')!==false){

			return $img_path[] = array($content);
		}
		elseif(strpos($content, '.gif')!==false){

			return $img_path[] = array($content);
		}
	}
	else{
		return $img_path = $matches[1];
	}

}




function my_dir($dir) {

//这个函数的功能是遍历所有的文件，返回文件名列表

	$files = array();

	if(@$handle = opendir($dir)) { //注意这里要加一个@，不然会有warning错误提示：）
		while(($file = readdir($handle)) !== false) {
			if($file != ".." && $file != ".") { //排除根目录；
				if(is_dir($dir."/".$file) && $file != 'delete_img') { //如果是子文件夹，就进行递归

					$files[$file] = my_dir($dir."/".$file);
				} else { //不然就将文件的名字存入数组；

					$hz=strstr($file,".");
					if($hz==".gif" or $hz==".jpg" or $hz==".JPG"or $hz==".JPEG"or $hz==".PNG"or $hz==".png"or $hz==".GIF")
					{
						$files[] = $file;
					}
				}
			}

		}

		closedir($handle);
		return $files;
	}
}



?>